package main

import "fmt"

/*
映射（map）是键值对(key-value)数据的集合
根据键key可以快速检索值value
键值的类型可以是任意的，key使用string的时候最多
*/

//创建和访问键值
func main0411() {
	//定义string为键int为值的映射,用于存储分数
	//var scoreMap map[string]int = map[string]int{}
	//var scoreMap = map[string]int{}
	//scoreMap := map[string]int{}

	//没有指定长度，长度为0
	scoreMap := make(map[string]int)
	//scoreMap := make(map[string]int,2)

	//添加键值对数据
	scoreMap["张全蛋"] = 59
	scoreMap["穆铁柱"] = 63
	scoreMap["张半蛋"] = 99

	//长度取决于键值对的个数
	fmt.Println("映射的长度是", len(scoreMap))//3

	//根据键访问值
	fmt.Println("张半蛋的成绩是", scoreMap["张半蛋"])//99
	fmt.Println("张全蛋的成绩是", scoreMap["张全蛋"])//59
	scoreMap["穆铁柱"] = 7
	fmt.Println("穆铁柱的成绩是", scoreMap["穆铁柱"])//7

	//访问并不存在的键
	score := scoreMap["西门庄"]
	fmt.Println("西门庄的成绩是", score)//0

}

//带校验的访问
func main042() {
	scoreMap := make(map[string]int)
	scoreMap["张全蛋"] = 59
	scoreMap["穆铁柱"] = 63
	scoreMap["张半蛋"] = 99

	//带校验地访问键值
	score, ok := scoreMap["穆铁柱"]
	fmt.Println(score, ok) //63，true true代表有穆铁柱这个键

	//score, ok = scoreMap["西门庄"]
	//fmt.Println(score, ok) //0,false false代表查询的键西门庄并不存在
	//if ok == true {
	//	fmt.Println("西门庄的成绩是", score)
	//} else {
	//	fmt.Println("查你妹，没有这个卵人")
	//}

	if score,ok := scoreMap["你妹"];ok==true{
		fmt.Println("你妹的成绩是", score)
	}else{
		fmt.Println("没有你妹这个卵人")
	}
}

//遍历
func main() {
	scoreMap := make(map[string]int)
	scoreMap["张全蛋"] = 59
	scoreMap["穆铁柱"] = 63
	scoreMap["张半蛋"] = 99

/*	//遍历key和value
	for key, value := range scoreMap {
		fmt.Printf("scoreMap[%s]=%d\n", key, value)
	}*/

	//遍历key
	for key := range scoreMap {
		fmt.Println(key, scoreMap[key])
	}

}
